package me.sunpeng.Wildcard.demo2;

/**
 * @author sp
 */
public class GenericTypeDemo2 {


    /**
     * 1、上界<? extends T>不能往里存，只能往外取
     * <p>
     * (1).<? extends Fruit>会使往盘子里放东西的set( )方法失效,但取东西get( )方法还有效
     * <p>
     * (2).取出来的东西只能存放在Fruit或它的基类里面，向上造型。
     * <p>
     * <p>
     * 下界<? super T>不影响往里存，但往外取只能放在Object对象里
     * <p>
     * (1).使用下界<? super Fruit>会使从盘子里取东西的get( )方法部分失效，只能存放到Object对象里。
     * <p>
     * 因为规定的下界，对于上界并不清楚，所以只能放到最根本的基类Object中
     *
     * @param args
     */
    public static void main(String[] args) {
        Plate<? extends Fruit> p = new Plate<>(new Apple());


//        p.set(new Fruit());capture of ? extends Fruit

        //读取出来的东西只能存放在Fruit或它的基类里
        Fruit newFruit1 = p.get();
        Object newFruit2 = p.get();
//      Apple newFruit3=p.get();capture of ? extends Fruit




        Plate<? super Fruit> p2= new Plate<>(new Fruit());

//存入元素正常
        p2.set(new Fruit());
        p2.set(new Apple());

//读取出来的东西只能存放在Object类里。
//        Apple Fruit3=p2.get();    //Error
//        Fruit Fruit1=p2.get();    //Error


        Object Fruit2=p2.get();


    }
}
